package com.qinke.mqcluster.simple;

import com.ibm.mq.*;
import com.ibm.mq.constants.MQConstants;

import java.io.IOException;

public class CQMReceiver {
    private static String host = "192.168.137.14";
    private static Integer port=1415;
    private static String channel="TESTCHANNEL";
    private static String qmgr="CQM4";
    private static String queueName="CQ1";
    private static void init(){
        //配置要使用的队列管理器的信息，这里使用队列管理器CQM1的信息
        MQEnvironment.hostname=host;
        MQEnvironment.port=port;
        MQEnvironment.channel=channel;
    }
    public static void receive(){
        try {
            //创建队列管理器对象，在实例化的时候会隐式连接队列管理器CQM1
            MQQueueManager mqQueueManager = new MQQueueManager(qmgr);
            //定义打开方式
            int openOption = MQConstants.MQOO_INPUT_SHARED; //以读取方式打开
            //直接循环，每次发10条消息
            //创建队列对量
            MQQueue queue = mqQueueManager.accessQueue(queueName,openOption);
            //定义获取消息时的一些操作
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = gmo.options + MQConstants.MQGMO_WAIT; //无消息时等待
            gmo.options = gmo.options + MQConstants.MQGMO_FAIL_IF_QUIESCING; //队列管理器停止时退出等待
            gmo.waitInterval = 300000; //无消息时等待时长
            for(int i=0;i<=1000;i++){
                //创建简单消息对象
                MQMessage mqMessage = new MQMessage();
                queue.get(mqMessage,gmo);
                String msgContent = mqMessage.readUTF();
                System.out.println(msgContent);
            }
            //关闭打开的资源，养成好习惯
            queue.close();
            mqQueueManager.disconnect();
        } catch (MQException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        init();
        receive();
    }
}
